"""
数据处理层
"""

import os
import pickle
from conf import settings


# 保存数据
def save_data(obj):

    # 拿到对象的类
    class_name = obj.__class__.__name__  # 类名 是字符串类型

    obj_dir = os.path.join(settings.DB_DIR, class_name)  # 拼接目录路径

    # 判断文件夹是否存在，如果不存在则创建
    if not os.path.isdir(
        obj_dir
    ):  # exists() 方法用于判断给定的路径是否存在，如果存在返回 True，否则返回 False。isdir() 方法用于判断给定的路径是否是一个目录。
        os.mkdir(
            obj_dir
        )  # makedirs() 方法用于递归创建目录，如果目录已经存在，则不进行任何操作。mkdir() 方法用于创建单级目录。

    obj_path = os.path.join(obj_dir, obj.name)

    # 保存对象数据到文件，这里使用pickle模块。pickle模块可以将任意对象序列化成一个字节序列，并将其保存到文件中，方便后续读取。
    with open(obj_path, "wb") as f:
        pickle.dump(
            obj, f
        )  # dump() 方法用于将对象序列化成一个字节序列，并将其保存到文件中。


# 查询数据
def select_data(cls, name):

    # 1 拼接出查询文件的路径
    obj_path = os.path.join(settings.DB_DIR, cls.__name__, name)

    # 2 判断文件是否存在
    if not os.path.exists(
        obj_path
    ):  # exists() 方法用于判断给定的路径是否存在，如果存在返回 True，否则返回 False。
        return

    # 3 读取文件内容
    with open(obj_path, "rb") as f:
        obj = pickle.load(f)  # load() 方法用于从文件中反序列化对象。
        return obj  # obj的类型是cls的实例化对象
